textview: Invalidate selection when its style changes
authorAlexander Mikhaylenko <alexm@gnome.org>
Mon, 3 May 2021 16:40:37 +0000 (21:40 +0500)
committerAlexander Mikhaylenko <alexm@gnome.org>
Mon, 3 May 2021 19:16:05 +0000 (00:16 +0500)
gtk/gtktextlayout.c
gtk/gtktextlayoutprivate.h
gtk/gtktextview.c

index b31c70799e489a1ca16fa09df1da7568fbb6c9e8..85b99661d581702cb8e7a74fde0ca88947f42ab3 100644 (file)
@@ -833,6 +833,20 @@ gtk_text_layout_invalidate_cursors (GtkTextLayout     *layout,
   gtk_text_layout_invalidated (layout);
 }
 
+void
+gtk_text_layout_invalidate_selection (GtkTextLayout *layout)
+{
+  GtkTextIter selection_start, selection_end;
+
+  g_return_if_fail (GTK_IS_TEXT_LAYOUT (layout));
+
+  if (layout->buffer &&
+      gtk_text_buffer_get_selection_bounds (layout->buffer,
+                                            &selection_start,
+                                            &selection_end))
+    gtk_text_layout_invalidate (layout, &selection_start, &selection_end);
+}
+
 void
 gtk_text_layout_free_line_data (GtkTextLayout   *layout,
                                 GtkTextLine     *line,
index 66676c7e7a53aa0eedfb796607d46fd5d76a3ca0..480d1ada6283f0a0634c3526ebf6cb7846ed3b10 100644 (file)
@@ -287,6 +287,7 @@ void gtk_text_layout_invalidate        (GtkTextLayout     *layout,
 void gtk_text_layout_invalidate_cursors(GtkTextLayout     *layout,
                                         const GtkTextIter *start,
                                         const GtkTextIter *end);
+void gtk_text_layout_invalidate_selection (GtkTextLayout  *layout);
 void gtk_text_layout_free_line_data    (GtkTextLayout     *layout,
                                         GtkTextLine       *line,
                                         GtkTextLineData   *line_data);
index 33c40d3555abfacbfa3ec37b6ead30d33910cdb3..2effe3eae20c7955437f54e2fa84481c71363e4c 100644 (file)
@@ -5046,6 +5046,9 @@ gtk_text_view_state_flags_changed (GtkWidget     *widget,
 
   gtk_css_node_set_state (priv->selection_node, state);
 
+  if (priv->layout)
+    gtk_text_layout_invalidate_selection (priv->layout);
+
   gtk_widget_queue_draw (widget);
 }